package main

import (
	"context"
	"fmt"
	"github.com/hashicorp/consul/api"
	"google.golang.org/grpc"
	"net"
	"server/proto/hello"
)

type Hello struct {
}

func (h Hello) SayHello(ctx context.Context, req *hello.HelloReq) (res *hello.HelloRes, err error) {
	return &hello.HelloRes{
		Message: "你好" + req.GetName(),
	}, nil
}

func main() {
	//------服务端在consul中注册一个服务-------
	// 1、consul的web页面配置
	consulWebConfig := api.DefaultConfig()
	//consulConfig.Address = "127.0.0.1:8500" //consul web服务启动的地址。默认为127.0.0.1:8500

	// 2、创建consul的web服务对象实例
	consulWebClient, _ := api.NewClient(consulWebConfig)

	// 3、创建 微服务的配置
	serviceConfig := api.AgentServiceRegistration{
		ID:      "1",
		Tags:    []string{"test"},
		Name:    "HelloService",
		Address: "127.0.0.1", //微服务的地址、端口
		Port:    8901,
		Check: &api.AgentServiceCheck{ //健康检查
			TCP:      "127.0.0.1:8901", //这里写微服务的运行地址
			Timeout:  "5s",
			Interval: "30s",
		},
	}

	//4、在consul的web服务客户端上，注册第三部的微服务
	consulWebClient.Agent().ServiceRegister(&serviceConfig)

	//------服务端注册rpc服务，和原来一样-------
	//1、创建grpc服务对象
	grpcServer := grpc.NewServer()
	//2、注册服务
	//把实现了接口的结构体和grpc服务对象绑定在一起(使用proto文件编译生成的Go文件中的 RegisterXXXServer 函数 )
	hello.RegisterHelloServer(grpcServer, &Hello{})
	//3、监听
	listener, err := net.Listen("tcp", "127.0.0.1:8901")
	if err != nil {
		fmt.Printf("err-->%v", err)
		return
	}
	//4、启动grpc服务对象，并传入监听对象
	grpcServer.Serve(listener)

}
